package com.wyix;

import com.wyix.entity.OrderResult;
import com.wyix.service.PaymentTask;
import com.wyix.service.StockCheckTask;

import java.util.concurrent.FutureTask;

/**
 * @author wangdx
 * @since 2025/8/1
 */
public class OrderMain {
    public static void main(String[] args) throws Exception {
        long startTime = System.currentTimeMillis();

        // 任务1：库存检查（Runnable）
        Thread stockThread = new Thread(new StockCheckTask("phone_123", 2), "库存线程");

        // 任务2：支付处理（Callable+FutureTask）
        FutureTask<Boolean> paymentTask = new FutureTask<>(
                new PaymentTask("ORDER_8888", 5999.0)
        );
        Thread paymentThread = new Thread(paymentTask, "支付线程11");

        // 错误示范：直接调用run()（同步执行，无多线程效果）
        // stockThread.run(); // 会阻塞主线程1.2秒
        // paymentTask.run(); // 会继续阻塞主线程1.5秒

        // 正确方式：调用start()启动新线程（异步并行）
        stockThread.start();
        paymentThread.start();

        // 主线程等待子线程完成（使用join()）
        stockThread.join();
        OrderResult.paymentOk = paymentTask.get(); // 获取支付结果

        // 输出最终结果
        long cost = System.currentTimeMillis() - startTime;
        System.out.println("订单处理完成：库存" + (OrderResult.stockOk ? "充足" : "不足")
                + "，支付" + (OrderResult.paymentOk ? "成功" : "失败") + "，总耗时" + cost + "毫秒");
    }
}